<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    
</body>
</html>
<script>
    // Iterator
    // Javascript原有的表示“集合”的数据结构 主要是Array 和 Object
    // ES6 又添加了Set 和 Map
    // 四种数据集合
    // 需要统一的接口机制来处理所有不同的数据结构
    // Iterator就是这样一种机制 它是一种接口 为各种不同的数据结构提供统一的访问机制
    // 任何数据结构只要部署Iterator接口 就可以完成遍历操作(依次处理该数据结构的所有成员)

    // Iterator作用有三个
    // 1.为各种数据结构提供统一的 便捷的访问接口
    // 2.使得数据结构的成员能够按照某次序排列
    // 3.ES6创造了一种新的遍历命令 for...of循环 Iterator接口主要供for...of消费

    // Iterator遍历过程如下
    // 1.创建一个指针对象 指向当前数据结构的起始位置 也就是 遍历器对象本质是一个指针对象
    // 2.第一次调用指针对象的next方法 可以将指针指向数据结构的第一个成员
    // 3.第二次调用指针对象的next方法 可以将指针指向数据结构的第二个成员
    // 4.不断调用指针对象的next方法 直到指向数据结构的结束位置

    // 每一次调用next方法 都会返回数据结构的当前成员的信息 具体来说就是返回一个包含value和done两个属性的对象
    // value 当前对象的值
    // done 布尔值 表示整个遍历是否结束

    var it = makeIterator(['a', 'b']);

    it.next() // { value: "a", done: false }
    it.next() // { value: "b", done: false }
    it.next() // { value: undefined, done: true }

    function makeIterator(array) {
        var nextIndex = 0;
        return {
            next: function() {
            return nextIndex < array.length ?
                {value: array[nextIndex++], done: false} :
                {value: undefined, done: true};
            }
        };
    }


    



</script>